home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 2000 January
/
Macworld (2000-01).dmg
/
Shareware World
/
Utilities
/
Text processing
/
PDF–Blit™1.02.sea
/
PDF–Blit™1.02
/
Source
/
pdfOutputDialog.c
< prev
next >
Wrap
Text File
|
1999-09-17
|
9KB
|
346 lines
// ©1999 by Kas Thomas. All rights reserved. See ReadMe for important information.
#include <Controls.h>
#include <BBXTInterface.h>
#include "p_intern.h"
#include <ExternalInterface.h>
#include <DialogUtilities.h>
#include "pdfPrefs.h"
#include <TextUtils.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Strings.h>
#include <ctype.h>
#include <Appearance.h>
void CopyPtoC( Str63 p, char *c);
void CopyCtoP( char *c, Str63 p);
pascal Boolean ourPrefsDialogFilter (DialogPtr dp,
EventRecord *event,
short *item);
void PStrCopy(Str255 p1,Str255 p2);
int IsNumeric(char *str);
typedef struct popupPrivateData {
MenuHandle mHandle;
short mID;
}popupPrivateData;
Str63 fontnames[] = { "\p","\pHelvetica","\pHelvetica-Bold","\pHelvetica-Oblique","\pHelvetica-BoldOblique",
"\pTimes-Roman","\pTimes-Bold","\pTimes-Italic","\pTimes-BoldItalic","\pCourier","\pCourier-Bold","\pCourier-Oblique","\pCourier-BoldOblique"};
Str63 transitionNames[] = { "\p","\pwipe","\pdissolve","\pbox","\psplit","\pblinds","\preplace","\pglitter"};
OSErr DoDialog(ExternalCallbackBlock *callbacks, PrefsPtr pp)
{
unsigned charsearch_str[128];
short iType, checkBoxVal;
Rect iRect;
Handle prefResource,iHandle = nil;
short item,i;
long offset;
OSErr err = noErr;
DialogPtr d;
GrafPtr save_port;
unsigned char tmp[32];
Str63 pstr;
Prefs backup;
ControlHandle ch1,ch2;
DialogTHndl dt;
BlockMove(pp,&backup,sizeof(Prefs));
GetPort(&save_port);
dt = (DialogTHndl) GetResource ('DLOG', 1020);
HNoPurge ((Handle) dt);
d = GetNewDialog ( 1020, nil, (WindowPtr)-1 );
SetPort( (GrafPtr)d ) ;
err = SetDialogDefaultItem(d, ok) ;
SetWRefCon( d, (long)pp );
{
long *ptl;
SetRect( &iRect, 8,20,8 + 120,20 + 20);
ch1 = NewControl( d, &iRect, "\p", true, 128, 0,
0, kControlBevelButtonSmallBevelProc , 0L );
SetControlValue(ch1,0);
offset = (long)*(**ch1).contrlData;
offset += 12L;
ptl = (long *)offset;
*ptl = (long) pp->font ;
PStrCopy((*ch1)->contrlTitle,fontnames[ pp->font ]);
SetRect( &iRect, 224,20,224 + 138,20 + 20);
ch2 = NewControl( d, &iRect, "\p", true, 129, 0,
0, kControlBevelButtonSmallBevelProc , 0L );
offset = (long)*(**ch2).contrlData;
offset += 12L;
ptl = (long *)offset;
*ptl = (long) pp->transition ;
PStrCopy((*ch2)->contrlTitle,transitionNames[ pp->transition ]);
}
CopyCtoP((char *)pp->author,pstr);
SetStrItem(d, AUTHOR_ITEM,pstr);
CopyCtoP((char *)pp->title,pstr);
SetStrItem(d, TITLE_ITEM,pstr);
CopyCtoP((char *)pp->keywords,pstr);
SetStrItem(d, KEYWORDS_ITEM,pstr);
sprintf((char *)tmp,"%3.1f",pp->ptsize);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,POINTSIZE_ITEM,pstr);
sprintf((char *)tmp,"%3.1f",pp->leading);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,LEADING_ITEM,pstr);
sprintf((char *)tmp,"%i",pp->spaces);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,SPACESPERTAB_ITEM,pstr);
sprintf((char *)tmp,"%i",pp->marginTop);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,MARGINTOP,pstr);
sprintf((char *)tmp,"%i",pp->marginBot);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,MARGINBOT,pstr);
sprintf((char *)tmp,"%i",pp->marginLeft);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,MARGINL,pstr);
sprintf((char *)tmp,"%i",pp->marginRt);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,MARGINR,pstr);
sprintf((char *)tmp,"%i",pp->chwidth);
CopyCtoP((char *)tmp,pstr);
SetStrItem(d,CHWIDTH_ITEM,pstr);
GetDialogItem(d, PAGENO_ITEM, &iType, &iHandle, &iRect);
SetControlValue((ControlHandle) iHandle, pp->numberPages);
GetDialogItem(d, JUSTIFY_ITEM, &iType, &iHandle, &iRect);
SetControlValue((ControlHandle) iHandle, pp->justify);
XAbleDlgCtl(d,HTML_ITEM,!pp->justify);
GetDialogItem(d, ACROBAT_ITEM, &iType, &iHandle, &iRect);
SetControlValue((ControlHandle) iHandle, pp->launchAcrobat);
GetDialogItem(d, HEADER_ITEM, &iType, &iHandle, &iRect);
SetControlValue((ControlHandle) iHandle, pp->header);
GetDialogItem(d, HTML_ITEM, &iType, &iHandle, &iRect);
SetControlValue((ControlHandle) iHandle, pp->interpHTML);
XAbleDlgCtl(d,JUSTIFY_ITEM,!pp->interpHTML);
InitCursor();
do {
ModalDialog(ourPrefsDialogFilter, &item);
if (item == JUSTIFY_ITEM)
{
pp->justify = !pp->justify;
SetDlgCtl(d, item, pp->justify);
XAbleDlgCtl(d,HTML_ITEM,!pp->justify);
}
if (item == HEADER_ITEM)
{
pp->header = !pp->header;
SetDlgCtl(d, item, pp->header);
}
if (item == HTML_ITEM)
{
pp->interpHTML = !pp->interpHTML;
SetDlgCtl(d, item, pp->interpHTML);
XAbleDlgCtl(d,JUSTIFY_ITEM,!pp->interpHTML);
}
if (item == AUTHOR_ITEM) {
Str63 s;
ReadStrItem(d, AUTHOR_ITEM, s);
CopyPtoC(s,(char *)pp->author );
}
if (item == TITLE_ITEM) {
Str63 s;
ReadStrItem(d, TITLE_ITEM, s);
CopyPtoC( s,(char *)pp->title );
}
if (item == KEYWORDS_ITEM) {
Str63 s;
ReadStrItem(d, KEYWORDS_ITEM, s);
CopyPtoC( s,(char *)pp->keywords );
}
if (item == SPACESPERTAB_ITEM) {
Str63 s; char temp2[12];
ReadStrItem(d, SPACESPERTAB_ITEM, s);
CopyPtoC(s,temp2);
if (!IsNumeric(temp2))
{ SysBeep(1); continue; }
pp->spaces = atoi(temp2);
}
if (item == PAGENO_ITEM) {
pp->numberPages = !pp->numberPages;
SetDlgCtl(d, item, pp->numberPages);
}
if (item == ACROBAT_ITEM) {
pp->launchAcrobat = !pp->launchAcrobat;
SetDlgCtl(d, item, pp->launchAcrobat);
}
if (item == MARGINTOP) {
Str63 s; char temp3[12];
ReadStrItem(d, MARGINTOP, s);
CopyPtoC(s,temp3);
if (!IsNumeric(temp3))
{ SysBeep(1); continue; }
pp->marginTop = atoi(temp3);
pp->marginTop += pp->leading;
}
if (item == MARGINBOT) {
Str63 s; char temp3[12];
ReadStrItem(d, MARGINBOT, s);
CopyPtoC(s,temp3);
if (!IsNumeric(temp3))
{ SysBeep(1); continue; }
pp->marginBot = atoi(temp3);
}
if (item == MARGINL) {
Str63 s; char temp3[12];
ReadStrItem(d, MARGINL, s);
CopyPtoC(s,temp3);
if (!IsNumeric(temp3))
{ SysBeep(1); continue; }
pp->marginLeft = atoi(temp3);
}
if (item == MARGINR) {
Str63 s; char temp3[12];
ReadStrItem(d, MARGINR, s);
CopyPtoC(s,temp3);
if (!IsNumeric(temp3))
{ SysBeep(1); continue; }
pp->marginRt = atoi(temp3);
}
if (item == CHWIDTH_ITEM) {
Str63 s; char temp6[12];
ReadStrItem(d, CHWIDTH_ITEM, s);
CopyPtoC(s,temp6);
if (!IsNumeric(temp6))
{ SysBeep(1); continue; }
pp->chwidth = atoi(temp6);
}
if (item == POINTSIZE_ITEM) {
Str63 s; char temp4[12]; double fl; int pt = '.';
ReadStrItem(d, POINTSIZE_ITEM, s);
CopyPtoC(s,temp4);
if (!IsNumeric(temp4))
{ SysBeep(1); continue; }
fl = atoi(temp4);
if(strchr(temp4,pt) != NULL) {
if (s[*s] == '.') ;
else {
s[1] = s[*s]; *s = 1;
CopyPtoC(s,temp4);
fl += (float)atoi(temp4)/10.;
}
}
pp->ptsize = fl;
}
if (item == LEADING_ITEM) {
Str63 s; char temp5[12]; double fk; int pt = '.';
ReadStrItem(d, LEADING_ITEM, s);
CopyPtoC(s,temp5);
if (!IsNumeric(temp5))
{ SysBeep(1); continue; }
fk = atoi(temp5);
if(strchr(temp5,pt) != NULL) {
if (s[*s] == '.') ;
else {
s[1] = s[*s]; *s = 1;
CopyPtoC(s,temp5);
fk += (float)atoi(temp5)/10.;
}
}
pp->leading = fk;
}
} while ((item != 1) && (item != 2));
if (item == 2) {
err = -1;
BlockMove( &backup,pp,sizeof(Prefs));
}
DisposeDialog(d);
SetPort(save_port);
HPurge ((Handle) dt);
return err;
}
pascal Boolean ourPrefsDialogFilter (DialogPtr dp,
EventRecord *event,
short *item)
{
Rect pop1, pop2, r;
Boolean result = false;
ControlHandle theControl;
WindowPtr fw = FrontWindow();
Point local;
PrefsPtr pp = (PrefsPtr) GetWRefCon(dp);
char charCode;
SetRect( &pop1, 8,20,8 + 120,20 + 20);
SetRect( &pop2, 224,20,224 + 138,20 + 20);
local.v = (event->where).v;
local.h = (event->where).h;
r = (**((WindowPeek) fw)->contRgn).rgnBBox;
local.h -= r.left;
local.v -= r.top;
switch (event->what) {
case mouseDown:
if (PtInRect(local, &pop1) ) {
if (FindControl(local, dp, &theControl))
if (TrackControl(theControl, local,(ControlActionUPP) -1)) {
long l,*ptl;
l = (long)*(**theControl).contrlData;
l += 12L;
ptl = (long *) l;
pp->font = *ptl ;
PStrCopy((*theControl)->contrlTitle,fontnames[ pp->font ]);
InvalRect(&pop1);
}
break;
}
if (PtInRect(local, &pop2) ) {
if (FindControl(local, dp, &theControl))
if (TrackControl(theControl, local,(ControlActionUPP) -1)) {
long l,*ptl;
l = (long)*(**theControl).contrlData;
l += 12L;
ptl = (long *) l;
pp->transition = *ptl ;
PStrCopy((*theControl)->contrlTitle,transitionNames[ pp->transition ]);
InvalRect(&pop2);
}
break;
}
case autoKey:
case keyDown:
charCode = event->message & charCodeMask;
if (charCode == 3 || charCode == 0x0D) {
*item = 1;
result = true;
break;
}
break;
default: break;
}
return result;
}
void CopyCtoP( char *c, Str63 p) {
int i=0;
char *t = c;
while (*t) { t++; i++; }
BlockMove(c,p+1,i);
*p=i;
}
void CopyPtoC( Str63 p, char *c) {
int i = *p;
BlockMove(p+1,c,i);
c[i] = 0x00;
}
void PStrCopy(Str255 p1,Str255 p2) {
int i = *p2;
BlockMove(p2+1,p1+1,i);
*p1 = *p2;
}
int IsNumeric(char *str) {
char *p = str;
while (*p)
if (!isdigit(*p) && *p != '.')
return 0;
else p++;
return 1;
}